we should only "don't move the cursor, but just select the current node"
authorKristian Rietveld <kris@imendio.com>
Tue, 9 Oct 2007 17:08:18 +0000 (17:08 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Tue, 9 Oct 2007 17:08:18 +0000 (17:08 +0000)
2007-10-09  Kristian Rietveld  <kris@imendio.com>

* gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): we should
only "don't move the cursor, but just select the current node" if the
cursor node is actually selectable.  (Fixes #483730, reported by
Geoff Bache).

svn path=/trunk/; revision=18898

ChangeLog
gtk/gtktreeview.c

index 4ca7105c880d703e1466e49406ad18f38fa96345..81b823fc752278cf2d689fc4efdd3b7afce15967 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-10-09  Kristian Rietveld  <kris@imendio.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): we should
+       only "don't move the cursor, but just select the current node" if the
+       cursor node is actually selectable.  (Fixes #483730, reported by
+       Geoff Bache).
+
 2007-10-08  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/gdkwindow-quartz.c: (gdk_window_focus): Implement,
index 1b2e687f49ff611a658693106b90e00bb2b90c8f..37d5b9c34b1c0722216903475ff05170bf45cac4 100644 (file)
@@ -9655,6 +9655,7 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view,
   GtkRBNode *new_cursor_node = NULL;
   GtkTreePath *cursor_path = NULL;
   gboolean grab_focus = TRUE;
+  gboolean selectable;
 
   if (! GTK_WIDGET_HAS_FOCUS (tree_view))
     return;
@@ -9667,17 +9668,20 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view,
   cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor);
   _gtk_tree_view_find_node (tree_view, cursor_path,
                            &cursor_tree, &cursor_node);
-  gtk_tree_path_free (cursor_path);
 
   if (cursor_tree == NULL)
     /* FIXME: we lost the cursor; should we get the first? */
     return;
 
   selection_count = gtk_tree_selection_count_selected_rows (tree_view->priv->selection);
+  selectable = _gtk_tree_selection_row_is_selectable (tree_view->priv->selection,
+                                                     cursor_node,
+                                                     cursor_path);
 
   if (selection_count == 0
       && tree_view->priv->selection->type != GTK_SELECTION_NONE
-      && !tree_view->priv->ctrl_pressed)
+      && !tree_view->priv->ctrl_pressed
+      && selectable)
     {
       /* Don't move the cursor, but just select the current node */
       new_cursor_tree = cursor_tree;
@@ -9693,6 +9697,8 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view,
                               &new_cursor_tree, &new_cursor_node);
     }
 
+  gtk_tree_path_free (cursor_path);
+
   if (new_cursor_node)
     {
       cursor_path = _gtk_tree_view_find_path (tree_view,